<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <button id="button">手在快1秒执行一次</button>
</body>
<script>
  /*
      定时器版本的
        fns 回调函数
        time 间隔时间
      function throttle(fns, time) {
      let flag // 定义一个空状态
      return function () { // 内部函数访问外部函数形成闭包
          if (!flag) { // 状态为空执行
              flag = setTimeout(() => {
                  fns.apply(this, arguments) // 改变this指向 吧 event 事件对象传出去
                  flag = null
              }, time)
          }
      }
     }
  */

  function throttle(fun, time) {
      let flag = 0
      return function () {
          let now = +new Date().valueOf()
          // 当前的值 减去上一次的值 >= 传过来的事件 执行
          if (now - flag >= time) {
              fun.apply(this, arguments)
              flag = now
          }
      }
  }



  button.onclick = throttle((e) => {
      console.log(e)
  }, 1000)

  //找一个字符串中重复最多一项和重复一项的字符串的最多个数
  var str = 'abcabcddkkkk'


function func(str) {
    let obj = {} // 声明一个对象
    for (let i = 0; i < str.length; i++) {
        let item = str[i]
        //  obj[item]  =  如果中间有重复的 obj[item] 就让他+1 没有重复的话就 直接返回 1 
        obj[item] = obj[item] + 1 || 1   
    }
    console.log(obj);
    //  声明两个变量一个 max_num是重复最对的个数  重复max_key 以这个是key
    var max_key, max_num = 0
    //   for in 用来便利对象拿到的是key值
    for (const key in obj) {
        if (max_num < obj[key]) {
            //   拿到value 值赋值 max_num
            max_num = obj[key]
            // 拿到 key 赋值给 max_keys
            max_key = key
        }
    }
    return `${max_key}${max_num}`
}
console.log(func(str))
</script> 
</html>